//I2C.c
#include <REGX52.h>
#include "I2C.h"


// sbit I2C_SCL=P1^0;
// sbit I2C_SDA=P1^1;

void I2C_Start(void){
	//确保满足起始条件
	I2C_SDA=1;
	I2C_SCL=1;
	//起始条件：SCL高电平期间SDA从高电平切换到低电平
	I2C_SDA=0;
	I2C_SCL=0;
}

void I2C_Stop(void){
	//起始条件：SCL高电平期间SDA从低电平切换到高电平
	I2C_SDA=0;
	I2C_SCL=1;
	I2C_SDA=1;
}

void I2C_SendByte(unsigned char Byte){
	unsigned char i;
	for(i=0;i<8;i++){
		I2C_SDA = Byte&(0x80>>i);	
		I2C_SCL=1;
		I2C_SCL=0;
	}
}

unsigned char  I2C_ReceiveByte(void){
	unsigned char i,Byte;
	I2C_SDA=1;	//释放总线
	//SCL低电平期间，从机依次将数据放入SDA线上（高位在前），SCL拉高读取数据
	//SCL拉高读取数据期间，SDA不允许发生变化
	for(i=0;i<8;i++){
		I2C_SCL=1;
		if(I2C_SDA) {Byte|=(0x80>>i);}
		I2C_SCL=0;
	}
	return Byte;
}


//发送应答。给0，否1
void I2C_SendAck(bit AckBit){
	I2C_SDA=AckBit;
	I2C_SCL=1;
	I2C_SCL=0;
}


//释放SDA 接收应答。有应答0，否1
bit I2C_ReceiveAck(void){
	bit AckBit;
	//释放SDA
	I2C_SDA=1;

	I2C_SCL=1;
	AckBit=I2C_SDA;
	I2C_SCL=0;
	return AckBit;
}
	




